iT邦幫忙

2024 iThome 鐵人賽

0
佛心分享-刷題不只是刷題

刷經典 LeetCode 題目系列 第 44

經典LeetCode 704. Binary Search

  • 分享至 

  • xImage
  •  

題目:
這道題目要求我們實現一個標準的二分搜尋演算法,以查找一個整數目標值在排序陣列中的索引。如果找不到該目標值,則回傳 -1。

解題思路

Divide and Conquer 分治法的精髓,不斷地將問題二分,這邊就來練習二元搜尋來尋找目標,

奇數時 mid 計算沒什麼問題,偶數時 mid 就會有偏左(四捨五入進位),但這不會影響結果,

調整左右邊界時,記得把 mid 排出在下次的搜尋範圍內。

class Solution {
public:
    int search(vector<int>& nums, int target) {
        int left = 0, right = nums.size()-1;
        for (int i = 0; i < nums.size(); i++) {
            // int mid = (left + right) / 2; // 相加除2
            int mid = left + (right - left) / 2; // left + 1/2 距離, 防止溢出
            if (nums[mid] == target)
                return mid;
            else if (nums[mid] > target)
                right = mid-1; // 調整右邊界,下次搜尋排除 mid
            else // nums[mid] < target
                left = mid+1; // 調整左邊界,下次搜尋排除 mid
        }
        
        return -1;
    }
};

時間複雜度:O(log n),因為每次將搜尋範圍都減半
空間複雜度:O(1),因為使用有限的空間來儲存結果,不會隨陣列大小增加而增加額外的空間。

參考:
#704. Binary Search


上一篇
經典LeetCode 110. Balanced Binary Tree
下一篇
經典LeetCode 278. First Bad Version
系列文
刷經典 LeetCode 題目51
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言